#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>

#define PTHREAD_SIZE 5

static void *new_thread_start(void *arg)
{
    int number = *((int *)arg);
    unsigned long tid = pthread_self();
    printf("第%d号线程，线程ID<%ld>\n", number, tid);

    pthread_exit((void *)number);
}

int main(void)
{
    pthread_t tid[PTHREAD_SIZE];

    int pthread_number[PTHREAD_SIZE] = {1, 2, 3, 4, 5};

    int i;

    void *tret;

    int ret;

    //申请5个线程
    /*这 5 个线程使用同一个 start 函数 new_thread， 该函数中定义了局部变量 number 和 tid 以及 arg 参数，意味着这 5
    个线程的线程栈中都各自为这些变量分配了内存空间，任何一个线程修改了 number 或 tid 都不会影响其它线程。*/
    for (i = 0; i < PTHREAD_SIZE; i++)
    {
        ret = pthread_create(&tid[i], NULL, new_thread_start, (void *)&pthread_number[i]);
        if (ret)
        {
            fprintf(stderr, "%d pthread_create error:%s\n", i, strerror(ret));
            exit(-1);
        }
    }

    //回收5个线程
    for (i = PTHREAD_SIZE - 1; i >= 0; i--)
    {
        ret = pthread_join(tid[i], &tret);
        if (ret)
        {
            fprintf(stderr, "%d pthread_join error:%s\n", i, strerror(ret));

            exit(-1);
        }

        printf("回收线程%ld\n", (long)tret);
    }

    exit(0);
}